package com.k8sops.backend.config;

import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.util.ClientBuilder;
import io.kubernetes.client.util.KubeConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.FileReader;
import java.io.IOException;

//@Configuration
public class KubernetesConfig {

    @Value("${kubernetes.config.path:#{null}}")
    private String kubeConfigPath;

    @Value("${kubernetes.api.server:#{null}}")
    private String apiServer;

    @Value("${kubernetes.api.token:#{null}}")
    private String apiToken;

//    @Bean
    public ApiClient kubernetesApiClient() throws IOException {
        // 如果提供了kubeconfig文件路径，则使用它
        if (kubeConfigPath != null && !kubeConfigPath.isEmpty()) {
            KubeConfig kubeConfig = KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath));
            return ClientBuilder.kubeconfig(kubeConfig).build();
        }
        
        // 否则使用API服务器URL和令牌
        if (apiServer != null && !apiServer.isEmpty() && apiToken != null && !apiToken.isEmpty()) {
            ApiClient client = ClientBuilder.standard().build();
            client.setBasePath(apiServer);
            
            // 处理K3s特殊的令牌格式
            String token = apiToken;
            // 如果令牌包含::server:部分，只取前面部分
            if (token.contains("::server:")) {
                token = token.split("::server:")[0];
            }
            
            // 正确设置授权头
            client.addDefaultHeader("Authorization", "Bearer " + token);
            client.setVerifyingSsl(false); // 在生产环境中应该启用SSL验证
            return client;
        }
        
        // 如果没有配置，则尝试使用默认配置
        return ClientBuilder.standard().build();
    }
}
